package com.ssy.lingxi.member.merchant.service.web;

import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.member.merchant.entity.MemberDO;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.NamePageVO;
import com.ssy.lingxi.member.merchant.model.vo.lifecycle.request.*;
import com.ssy.lingxi.member.merchant.model.vo.lifecycle.response.*;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.response.MemberDetailCreditComplainSummaryVO;
import org.springframework.http.HttpHeaders;

import java.util.List;

/**
 * 会员投诉与建议服务类
 * @author yzc
 * @version 2.0.0
 * @date 2021/5/17
 */
public interface IMemberComplaintService {

    /**
     * 状态下拉查询
     * @param headers Http头部信息
     * @return 查询结果
     */
    Wrapper<List<StatusVO>> listMemberComplaintStatus(HttpHeaders headers);

    /**
     * 投诉建议新增 - 选择上级会员
     * @param headers Http头部信息 Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<UpperMemberQueryVO>> pageMembers(HttpHeaders headers, NamePageVO pageVO);

    /**
     * 投诉建议分页列表
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberUpperComplaintPageQueryVO>> pageUpperMemberComplaint(HttpHeaders headers, MemberComplaintPageVO pageVO);

    /**
     * 会员信息 - 会员信用 - 会员投诉记录汇总
     * @param upperMember 上级会员
     * @param roleId 上级会员角色Id
     * @param subMember 下级会员
     * @param subRoleId 下级会员角色Id
     * @return 汇总结果
     */
    Wrapper<MemberDetailCreditComplainSummaryVO> summaryUpperMemberComplaints(MemberDO upperMember, Long roleId,  MemberDO subMember, Long subRoleId);

    /**
     * 会员信息 - 会员信用 - 分页查询会员投诉记录
     * @param upperMember 上级会员
     * @param roleId 上级会员角色Id
     * @param subMember 下级会员
     * @param subRoleId 下级会员角色Id
     * @param current 当前页
     * @param pageSize 每页行数
     * @return 查询结果
     */
    Wrapper<PageData<MemberCreditComplaintPageQueryVO>> pageUpperMemberComplaint(MemberDO upperMember, Long roleId,  MemberDO subMember, Long subRoleId, int current, int pageSize);

    /**
     * 投诉建议分页列表
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 操作结果
     */
    Wrapper<PageData<MemberSubComplaintPageQueryVO>> pageSubMemberComplaint(HttpHeaders headers, MemberComplaintPageVO pageVO);

    /**
     * 投诉建议查询
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 操作结果
     */
    Wrapper<MemberComplaintUpperVO> getUpperMemberComplaint(HttpHeaders headers, CommonIdVO idVO);

    /**
     * 投诉建议查询
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 操作结果
     */
    Wrapper<MemberComplaintSubVO> getSubMemberComplaint(HttpHeaders headers, CommonIdVO idVO);

    /**
     * 投诉建议新增
     * @param headers Http头部信息
     * @param addVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> addUpperMemberComplaint(HttpHeaders headers, MemberComplaintUpperAddVO addVO);

    /**
     * 投诉建议新增
     * @param headers Http头部信息
     * @param addVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> addSubMemberComplaint(HttpHeaders headers, MemberComplaintSubAddVO addVO);

    /**
     * 投诉建议修改
     * @param headers Http头部信息
     * @param addVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateUpperMemberComplaint(HttpHeaders headers, MemberComplaintUpperUpdateVO addVO);

    /**
     * 投诉建议修改
     * @param headers Http头部信息
     * @param addVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> updateSubMemberComplaint(HttpHeaders headers, MemberComplaintSubUpdateVO addVO);

    /**
     * 投诉建议删除
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> deleteMemberComplaint(HttpHeaders headers, CommonIdVO idVO);

    /**
     * 投诉建议提交
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> submitMemberComplaint(HttpHeaders headers, CommonIdVO idVO);

    /**
     * 投诉建议处理
     * @param headers Http头部信息
     * @param handleVO 接口参数
     * @return 操作结果
     */
    Wrapper<Void> handleMemberComplaint(HttpHeaders headers, MemberComplaintHandleVO handleVO);

}
